import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;


/**
 * str1:"welcome to cvte"
 * str2:"come"
 * 问题:删除字符串1当中,出现的所有字符串2当中的字符.
 * 使用ArrayList来解决这个给问题
 * ---遍历str1中的每个字符 是否存在str2的字符 不存在的放到集合ArrayList当中
 */

public class Test {

    public List<List<Integer>> generate(int numRows) {
        //定义了一个二位数组
        List<List<Integer>> ret = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        list.add(1);
        ret.add(list);

        for (int i = 1; i < numRows; i++) {
            //没循环一次 就是一行
            List<Integer> curRow = new ArrayList<>();
            curRow.add(1);//每一行的第一个元素
            //处理中间的数字
            List<Integer> prevRow = ret.get(i-1);
            for (int j = 1; j < i; j++) {
                int x = prevRow.get(j) + prevRow.get(j-1);
                curRow.add(x);
            }
            //处理最后一个数字
            curRow.add(1);
            ret.add(curRow);
        }
        return ret;
    }

    public static List<Character> func(String str1,String str2) {
        List<Character> list = new ArrayList<>();//向上转型 创建一个字符列表 用于储存删除后剩余的字符
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);//获取str1中的每个字符
            if(!str2.contains(ch +"")) {//判断字符是否存在于字符2中
                list.add(ch);//如果不存在 则将字符添加到list列表中
            }
        }
        return list;//返回删除后的字符列表
    }

    public static void main4(String[] args) {
        List<Character> ret = func("welcome to cvte","come");
        for (char ch:
             ret) {
            System.out.print(ch);
        }//wl t vt
    }
    public static void main3(String[] args) {
        //ArrayList的遍历
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(10);
        arrayList.add(20);
        arrayList.add(30);
        arrayList.add(40);
        //第一种 直接输出
        System.out.println(arrayList);
        //第2种遍历方式  for
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i) + " ");
        }
        System.out.println();
        //3、for-each
        for (int x:           //自动装箱
             arrayList) {
            System.out.print(x + " ");
        }
        System.out.println();
        //4.迭代器(有多种使用方式)
        Iterator<Integer> it1 = arrayList.iterator();//iterator继承自Iterator
        while (it1.hasNext()) {
            System.out.print(it1.next() + " ");
        }
        System.out.println();
        //5
        Iterator<Integer> it2 = arrayList.listIterator();//listIterator继承自Iterator
        while (it2.hasNext()) {
            System.out.print(it2.next() + " ");
        }
        System.out.println();
        //6.从后向前遍历
        ListIterator<Integer> it3 = arrayList.listIterator(arrayList.size());
        //arrayList.size()是一个方法调用，它返回了arrayList列表的大小或元素数量。
        // 在这里，ListIterator<Integer> it3 = arrayList.listIterator(arrayList.size())的作用是
        // 创建一个ListIterator对象it3，并将其定位在arrayList列表的 末尾 位置。
        while (it3.hasPrevious()) {
            System.out.print(it3.previous() + " ");
        }
        System.out.println();
    }


    public static void main2(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        arrayList.add(99);
        arrayList.add(88);
        arrayList.add(75);
        arrayList.add(64);
        System.out.println(arrayList);

        ArrayList<Number> arrayList1 = new ArrayList(arrayList);
        arrayList1.add(99999999);//也有自己的add方法
        System.out.println(arrayList1);//打印输出[99, 88, 75, 64, 99999999],"把另一个集合 拿过来 构造当前的集合"

        //ArrayList<String> arrayList2 = new ArrayList<>(arrayList);//error
        /**
          满足ArrayList实现了Collection接口的条件,但是不满足传入的参数是E类型或者E的子类类型().
         传入的参数arrayList是Integer,和String无关系.既不是String类型也不是Stringent的子类类型
        */

        //subList截取
        List<Number> list =arrayList1.subList(0,2);
        System.out.println(list);
        //[99, 88, 75, 64, 99999999]
        //我们认为截取后list的值是[99, 88]
        System.out.println("=======================");
        list.set(0,199);
        System.out.println(list);//把list里面0下标的值改为199,就认为变成[199,88]
        System.out.println(arrayList1);//不变,还是[99, 88, 75, 64, 99999999]
        /**
         * 实际输出:
         * [199, 88]
         * [199, 88, 75, 64, 99999999]
         * List<Number> list =arrayList1.subList(0,2);不是产生新的对象
         * list和arrayList1指向的是同一个对象
         * */


    }

    public static void main1(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        myArrayList.add(10);
        myArrayList.add(20);
        myArrayList.add(30);
        myArrayList.add(40);
        myArrayList.remove(40);
        myArrayList.display();
    }
}
